#pragma once
#include <Display/camera_interface.h>

namespace PhysLeo {

/**
 * Renderable interface.
 * any object which want to be rendered in PhysLeo should extends this interface.
 */
class Renderable {
public:
    /**
     * default constructor
     */
    Renderable() = default;

    /**
     * delete default copy constructor
     */
    Renderable(const Renderable&) = delete;

    /**
     * delete default move constructor
     */
    Renderable(Renderable&&) = delete;

    /**
     * delete default copy assignment function
     */
    Renderable& operator=(const Renderable&) = delete;

    /**
     * delete default move assignment function
     */
    Renderable& operator=(Renderable&&) = delete;

    /**
     * default virtual destructor
     */
    virtual ~Renderable() = default;

    /**
     * init openGL resource, interface needs to be implemented
     */
	virtual void initGlResource() = 0;

    /**
     * draw entity, interface needs to be implemented
     * @param[in] camera  a camera object which implements camera interface
     */
	virtual void draw(CameraInterface &camera) = 0;
};

}